import serial
import time

ser = serial.Serial(
    port='/dev/ttyAMA0',
    baudrate=115200,
    timeout=1

)

buffer = bytearray()
message = bytearray()
try:
    while True:
        # ser.write(b'Hello from Pi 5!\n')

        if ser.in_waiting > 0:
            data = ser.readline(ser.in_waiting)
            buffer.extend(data)

            #进入这里之前已经接收到所有数据保持在buffer中

            while b'\n' in buffer: #只要接收到的数据buffer有字节'\n'就进入while，数据可能存在多个'\n'
                index = buffer.index(b'\n') #找到结束位置的索引
                message = buffer[:index + 1] #将数据传给message
                buffer = buffer[index + 1:] #移除已经处理的数据，将没处理过数据，也就是'\n'后面的数据截取出来

                try:
                    decoded = message.decode('utf-8').strip()
                    print(f"接收到数据：{decoded}")
                except UnicodeDecodeError:
                    decoded = str(message)  # 以十六进制等形式显示原始字节
                    print(f"接收到数据：{decoded}")
                  

        time.sleep(0.001)
except KeyboardInterrupt:
    print("程序已停止")
finally:
    ser.close()